package com.zjdiepu.www.dao.yw;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.zjdiepu.www.model.base.ext.ClientTypeExt;
import com.zjdiepu.www.model.base.vo.BusinessTotalVo;
import com.zjdiepu.www.model.yw.dto.YwBusiness;
import com.zjdiepu.www.model.yw.ext.YwBusinessExt;
import com.zjdiepu.www.model.yw.request.YwBusinessQueryRequest;
import com.zjdiepu.www.model.yw.response.YwBusinessDetail;

/**
 * 业务信息dao层操作<br/>
 * @author xiongxiaotun<br/>
 * @time 2017年04月24日 14时45分<br/>
 * @since 1.0<br/>
 */
public interface YwBusinessMapper {
	/**
	 * 条件修改
	 * @param param
	 */
	void updateByExtSelective(Map<String, Object> param);
	/**
	 * 多表查询
	 * @date 2017年04月24日 14时45分
	 * @param customerNo
	 * @return
	 */
	List<YwBusiness> selectByCustomerNo(@Param("customerNo")String customerNo);
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: queryHistoryByCustomerNo  <br/>
	 * @Description: 根据客户身份证号查询历史业务 <br/>
	 * @param customerNo
	 * @version V1.0  <br/>
	 */
	String queryHistoryByCustomerNo(String customerNo);
	/**
	 * 主键删除
	 * @param id
	 * @return
	 */
	int deleteByPrimaryKey(String id);

	/**
	 * 添加记录
	 * 
	 * @param ywBusiness
	 * @return
	 */
	int insert(YwBusiness ywBusiness);

	/**
	 * 批量添加记录
	 * @param ywBusinesss
	 * @return
	 */
	int insertBatch(List<YwBusiness> ywBusinesss);

	/**
	 * 主键查询
	 * @param id
	 * @return
	 */
	YwBusiness selectByPrimaryKey(String id);
	
	/**
	 * 主键多表查询
	 * @date 2017年04月24日 14时45分
	 * @param id
	 * @return
	 */
	YwBusinessDetail selectMultiByPrimaryKey(String id);

	/**
	 * 主键更新：只更新不是null值字段，字符串还要求trim()后长度不为0
	 * @param ywBusiness
	 * @return
	 */
	int updateByPrimaryKeySelective(YwBusiness ywBusiness);

	/**
	 * 主键更新
	 * @param ywBusiness
	 * @return
	 */
	int updateByPrimaryKey(YwBusiness ywBusiness);
	
	/**
	 * 条件查询
	 * @param ywBusinessExt
	 * @return
	 */
	List<YwBusiness> selectByExt(YwBusinessExt ywBusinessExt);
	
	/**
	 * 多表查询
	 * @date 2017年04月24日 14时45分
	 * @param ywBusinessQueryRequest
	 * @return
	 */
	List<YwBusiness> selectMultiByExt(YwBusinessQueryRequest ywBusinessQueryRequest);
	
	/**
	 * 精确定位客户查询
	 * @date 2017年04月24日 14时45分
	 * @param ywBusinessQueryRequest
	 * @return
	 */
	List<YwBusiness> selectLessOptionsByExt(YwBusinessQueryRequest ywBusinessQueryRequest);
	
	/**
	 * 条件统计
	 * @param ywBusinessExt
	 * @return
	 */
	int countByExt(YwBusinessExt ywBusinessExt);
	
	/**
	 * 多表统计
	 * @param ywBusinessQueryRequest
	 * @return
	 */
	int countMultiByExt(YwBusinessQueryRequest ywBusinessQueryRequest);
	
	/**
	 * 精确定位客户统计
	 * @param ywBusinessQueryRequest
	 * @return
	 */
	int countLessOptionsByExt(YwBusinessQueryRequest ywBusinessQueryRequest);
	
	/**
	 * 根据主键清除空字段，设置值为null
	 * @param fieldNames 字段名
	 * @param id 主键
	 */
	void clearEmpty(@Param("fieldNames")Set<String> fieldNames, @Param("id")String id);
	/**
	 * 精确统计(=)
	 * @author xiongxiaotun
	 * @time 2017年04月24日 14时45分
	 * @since 1.0
	 * @update
	 * @param sysPower
	 * @return
	 */
	int countRefined(YwBusiness ywBusiness);
	/**
	 * 精确查询(=)
	 * @author xiongxiaotun
	 * @time 2017年04月24日 14时45分
	 * @since 1.0
	 * @update
	 * @param ywBusiness
	 * @return
	 */
	YwBusiness selectRefined(YwBusiness ywBusiness);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: updateBatch  <br/>
	 * @Description:批量删除/禁用/启用  <br/>
	 * @param modifier 修改人
	 * @param modifierName 修改人名称
	 * @param modified 修改时间（秒）
	 * @param dpStatus 修改后状态
	 * @param ids 待修改数据ID
	 * @return
	 * @version V1.0  <br/>
	 */
	int updateBatch(@Param("modifier")String modifier, @Param("modifierName")String modifierName, @Param("modified")Integer modified,
			@Param("dpStatus")Integer dpStatus, @Param("ids")List<String> ids);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: updateCommonBatch  <br/>
	 * @Description:批量修改  <br/>
	 * @param ywBusiness 修改后数据
	 * @param ids 待修改数据ID
	 * @return
	 * @version V1.0  <br/>
	 */
	int updateCommonBatch(@Param("ywBusiness")YwBusiness ywBusiness, @Param("ids")List<String> ids);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: countNotAllocation <br/>
	 * @Description: 统计未分配客户资料 <br/>
	 * @param ywBusinessExt
	 * @return 指定部门客户资料数
	 * @version V1.0  <br/>
	 */
	int countNotAllocation(YwBusinessExt ywBusinessExt);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: selectNotAllocation <br/>
	 * @Description: 查询未分配客户资料 <br/>
	 * @param ywBusinessExt
	 * @return 指定部门客户资料
	 * @version V1.0  <br/>
	 */
	List<YwBusiness> selectNotAllocation(YwBusinessExt ywBusinessExt);
	
	/**
	 * 按条件精确查询
	* @author zhangpp
	* @Title: getYwBusiness 
	* 
	* @param @param ywBusiness
	* @param @return    设定文件 
	* @return List<YwBusiness>    返回类型 
	* @version V1.0
	* @throws
	 */
	List<YwBusiness> getYwBusiness(YwBusiness ywBusiness);
	
	void updateRefundStatus(YwBusinessExt ywExt);
	int countBusinessNum(ClientTypeExt clientTypeExt);
	List<BusinessTotalVo> selectBusinessNum(ClientTypeExt clientTypeExt);
	int countXHHNum(ClientTypeExt clientTypeExt);
	List<BusinessTotalVo> selectXHHNum(ClientTypeExt clientTypeExt);
	int countAllBusinessNum(ClientTypeExt clientTypeExt);
	int countAllXHHNum(ClientTypeExt clientTypeExt);
}